using System.Diagnostics.CodeAnalysis;
namespace Plugins.Interfaces
{
    public interface IPluginPropertyContainer : IPluginContainer<IPluginProperty>, IPluginConstructible<IPluginPropertyContainer>, IPluginEvent<IPluginProperty>
    {
        bool Add(string propertyName);
        bool Remove(string propertyName);
        bool Contains(string propertyName);

        [SuppressMessage("Microsoft.Design", "CA1004")]
        T GetValue<T>(string propertyName);
        [SuppressMessage("Microsoft.Design", "CA1004")]
        T GetValue<T>(string propertyName, T defaultValue);
        [SuppressMessage("Microsoft.Design", "CA1004")]
        T GetValue<T>(string propertyName, T defaultValue, IPluginPropertyConverter<T> converter);

        [SuppressMessage("Microsoft.Design", "CA1004")]
        bool SetValue<T>(string propertyName, T value);
        [SuppressMessage("Microsoft.Design", "CA1004")]
        bool SetValue<T>(string propertyName, T value, T defaultValue);
        [SuppressMessage("Microsoft.Design", "CA1004")]
        bool SetValue<T>(string propertyName, T value, T defaultValue, IPluginPropertyConverter<T> converter);
    }
}

